package xiaomin.demo.algorithm;
/*
给定 一个 m* n 矩阵， 按 螺旋 顺序 返回 所有 元素。

陈东锋. 进军硅谷:程序员面试揭秘 (技术移民参考手册) (p. 98). 电子工业出版社. Kindle 版本.

思路：
这是一个周期问题，每一个周期为4个动作
起点x1,y1,终点x2,y2
1:从左到右 x1,y1 ~ x2,y1
2.从上到下 x2,y1 ~ x2,y2
3.从右到左 x2,y2 ~ x1,y2
4.从下到上 x1,y2 ~ x1,y1
判断是否遍历完毕
如果行数是偶数
y1=行数/2  例如行数为4 y1为2
如果行数是奇数
y1=行数/2+1
如果列数是偶数
x1=列数2
如果列数是奇数
x1=列数/2+1

重新计算新的矩阵坐标x1+1,y1+1;x2-1,y2-1
 */
public class Lesson25 {
    public static void run() {
        int[][] matrix = {
                {0, 2, 6},
                {4, 5, 6},
                {0, 2, 6}
        };

//        int[][] matrix = {
//                {1, 2, 4, 5, 3},
//                {4, 5, 4, 5, 6},
//                {7, 8, 4, 3, 9},
//        };

//        int[][] matrix = {
//                {1, 2, 3}
//        };

//        int[][] matrix = {
//                {1, 2},
//                {4, 5},
//                {4, 5},
//                {4, 5}
//        };


//        int[][] matrix = {
//                {1},
//                {4},
//                {4},
//                {4}
//        };

        int x1,y1,x2,y2;

        x1=0;
        y1=0;
        x2=matrix[0].length-1;
        y2=matrix.length-1;
        int xmid,ymid;
        if(matrix[0].length%2>0){
            xmid=matrix[0].length/2;
        }
        else {
            xmid=matrix[0].length/2-1;
        }

        if(matrix.length%2>0){
            ymid=matrix.length/2;
        }
        else {
            ymid=matrix.length/2-1;
        }

        do{
            //从左往右
            int i=x1;
            while (i<=x2){
                System.out.print(matrix[y1][i]);
                i++;
            }

            //从上往下
            i = y1+1;
            if(i<=y2) {
                while (i <= y2) {
                    System.out.print(matrix[i][x2]);
                    i++;
                }
                //从右往左
                i = x2 - 1;
                if(i >= x1) {
                    while (i >= x1) {
                        System.out.print(matrix[y2][i]);
                        i--;
                    }

                    //从下往上
                    i = y2 - 1;
                    while (i > y1) {
                        System.out.print(matrix[i][x1]);
                        i--;
                    }
                }
            }


            //判断是否到终点了
            if(x1==xmid || y1==ymid || x2==xmid || y2==ymid){
                break;
            }
            x1=x1+1;
            y1=y1+1;
            x2=x2-1;
            y2=y2-1;

        }while (true);

    }
}
